package org.spark.api.constant;

import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.util.Bytes;

/**
 * 对应hbase中namespace为dy的所有表
 * 需要保持java中枚举名字命名规范
 * 如果表名跟枚举名字不一致，比如表名chanmama-test，枚举名CHANMAMA_TEST
 * 则定义成CHANMAMA_TEST("chanmama-test")
 */
public enum DyTable {

    /**
     * 土豪
     */
    TYRANT("tyrant"),


    /**
     * 视频
     */
    AWEME,
    AWEME_DAILY("aweme-daily"),
    AWEME_SNAPSHOT("aweme-snapshot"),
    AWEME_HOURLY("aweme-hourly"),
    AWEME_REALTIME("aweme-rt"),
    AWEME_DETAIL_WITH_CREATE_TIME("aweme-detail"),

    /**
     * 电商视频排行榜
     */
    PRODUCT_AWEME_DAY_RANK("product-aweme-rank"),
    PRODUCT_AWEME_WEEK_RANK("product-aweme-week-rank"),
    PRODUCT_AWEME_MONTH_RANK("product-aweme-month-rank"),

    /**
     * 热门视频排行榜
     */
    HOT_AWEME_DAY_RANK("hot-aweme-rank"),
    HOT_AWEME_WEEK_RANK("hot-aweme-week-rank"),
    HOT_AWEME_MONTH_RANK("hot-aweme-month-rank"),

    /**
     * 视频关联商品表
     */
    AWEME_PRODUCT("aweme-product"),
    PRODUCT_AWEME("product-aweme"),
    AUTHOR_PRODUCT("author-product"),
    AUTHOR_AWEME_MONITOR("author-aweme-monitor"),

    AUTHOR_AWEME("author-aweme"),

    PRODUCT_AWEME_INCREMENT_CAL("product-aweme-increment-cal"),

    /**
     * 播主
     */
    AUTHOR,
    AUTHOR_DAILY("author-daily"),
    AUTHOR_SNAPSHOT("author-snapshot"),
    AUTHOR_HOURLY("author-hourly"),

    TALENT_AUTHOR("talent"),
    TALENT_AUTHOR_DAILY("talent-daily"),
    TALENT_AUTHOR_SNAPSHOT("talent-snapshot"),
    TALENT_AUTHOR_HOURLY("talent-hourly"),

    AUTHOR_DAY_RANK("author-rank"),
    AUTHOR_WEEK_RANK("author-week-rank"),
    AUTHOR_MONTH_RANK("author-month-rank"),

    /**
     * 评论
     */
    COMMENT,
    COMMENT_TRANSIENT("comment-transient"),
    COMMENT_HOT("comment-hot"),

    /**
     * 商品
     */
    PRODUCT("product"),
    PRODUCT_SNAPSHOT("product-snapshot"),
    PRODUCT_DAILY("product-daily"),
    PRODUCT_HOURLY("product-hourly"),
    PRODUCT_HOT("product-hot"),

    PRODUCT_DAY_RANK("product-rank"),
    PRODUCT_WEEK_RANK("product-week-rank"),
    PRODUCT_MONTH_RANK("product-month-rank"),

    PRODUCT_LIVE_SALES_START_RT("product-live-sales-start-rt"),
    PRODUCT_LIVE_SALES_GAP_RT("product-live-sales-gap-rt"),

    PRODUCT_LIVE_VOLUME_START_RT("product-live-volume-start-rt"),
    PRODUCT_LIVE_VOLUME_GAP_RT("product-live-volume-gap-rt"),

    LIVE_DETAIL_RT("product-live-detail-rt"),


    /**
     * 播主直播间礼物收入数据
     */
    LIVE_AUTHOR_GIFT("live-author-gift"),

    LIVE_PROMOTION("product-live-promotion"),

    /**
     * 博主粉丝，包括一个客户需要的粉丝数据
     */
    FOLLOWER,
    FOLLOWER_TRANSIENT("follower-transient"),


    /**
     * 直播商品和房间关联
     * rowKey是商品id和房间id
     */
    LIVE_PRODUCT_ROOM("live-product-room"),

    /**
     * 直播房间
     * rowKey是房间id
     */
    LIVE_ROOM("live-room"),

    LIVE_ROOM_TIMESTAMP("live-room-timestamp"),
    LIVE_AUTHOR_ROOM("live-author-room"),
    LIVE_ROOM_LINKMICAUTHOR_CHANNEL("live-room-linkMicAuthor-channel"),


    /**
     * 直播-商品详情-带货销量趋势，使用旧的表，product-snapshot，rowKey:product-date， (DigestUtils.sha1Hex(pid) + todayDate).getBytes
     */
    /**
     * 商品详情-关联达人
     */
    LIVE_DETAILS_PRODUCT_DATE_AUTHOR("live-details-product-date-author"),
    /**
     * 直播-商品详情-直播分析-关联直播
     */
    LIVE_DETAILS_PRODUCT_DATE_ROOM("live-details-product-date-room"),
    /**
     * 直播-达人详情-直播分析
     */
    LIVE_DETAILS_AUTHOR_DATE("live-details-author-date"),
    /**
     * 直播-达人详情-商品销售记录
     */
    LIVE_DETAILS_AUTHOR_DATE_ROOM_PRODUCT("live-details-author-date-room-product"),
    /**
     * 直播-达人详情-直播记录
     */
    LIVE_DETAILS_AUTHOR_DATE_ROOM("live-details-author-date-room"),
    /**
     * 直播-直播详情-直播人气趋势，rowKey: roomId作为前缀，爬取时间作为后缀
     */
    LIVE_DETAILS_ROOM_TIME("live-details-room-time"),
    /**
     * 直播-直播详情-商品分析
     */
    LIVE_DETAILS_ROOM_PRODUCT("live-details-room-product"),
    /**
     * 直播-直播详情-礼物分析（未排序过的细节数据）
     */
    LIVE_DETAILS_ROOM_USER("live-details-room-user"),
    /**
     * 直播-直播详情-礼物分析（排序过抽取TOP的数据）
     */
    LIVE_DETAILS_ROOM_USER_RANK("live-details-room-user-rank"),

    /**
     * 用来计算-直播详情-直播分析相关指标的中间表
     */
    LIVE_DETAILS_AUTHOR_ROOM("live-details-author-room"),


    /**
     * 博主-直播房间-弹幕用户/送礼人 关联表
     */
    LIVE_AUTHOR_ROOM_BARRAGE("live-author-room-barrage"),
    /**
     * 博主-直播房间-弹幕用户弹幕内容
     */
    LIVE_AUTHOR_ROOM_BARRAGE_MESSAGE("live-author-room-barrage-message"),
    /**
     * 弹幕用户/送礼人详细信息
     */
    LIVE_BARRAGE("live-barrage"),


    /**
     * 商品销量等信息，rowKey分别为：product-date、date-product
     */
    LIVE_PROMOTION_PRODUCT_DATE("live-promotion-product-date"),
    LIVE_PROMOTION_DATE_PRODUCT("live-promotion-date-product"),
    LIVE_PROMOTION_PRODUCT("live-promotion-product"),
    LIVE_PROMOTION_PRODUCT_DATE_ROOM("live-promotion-product-date-room"),

    /**
     * 直播商品
     * rowKey是商品id
     */
    LIVE_PRODUCT("live-product"),

    /**
     * 热门音乐
     */
    MUSIC,
    MUSIC_SNAPSHOT("music-snapshot"),
    MUSIC_DAILY("music-daily"),

    /**
     * 抖音小店排行榜
     */
    JINRITEMAI_DAILY_RANK("jinritemai-daily-rank"),
    JINRITEMAI_WEEK_RANK("jinritemai-week-rank"),
    JINRITEMAI_MONTH_RANK("jinritemai-month-rank"),

    /**
     * 达人直播商品销量信息
     */
    DETAILS_AUTHOR_ROOM_PRODUCT("details-author-room-product"),

    /**
     * 榜单的时间戳版本
     * rowKey：pack(榜单名，esIndex).pack(排行榜时间)
     */
    RANK_TIMESTAMP_VERSION("rank-timestamp-version"),

    /**
     *  达人-Date-商品-直播间
     */
    DETAILS_AUTHOR_DATE_PRODUCT_ROOM("details-author-date-product-room"),

    /**
     *  达人-Date-商品-视频
     */
    DETAILS_AUTHOR_DATE_PRODUCT_AWEME("details-author-date-product-aweme"),

    /**
     * 商品-达人-直播间
     */
    DETAILS_PRODUCT_AUTHOR_ROOM("details-product-author-room"),

    /**
     *  商品-达人-视频
     */
    DETAILS_PRODUCT_AUTHOR_AWEME("details-product-author-aweme"),

    /**
     * 商品日期视频
     */
    DETAILS_PRODUCT_DATE_AWEME("details-product-date-aweme"),
    /**
     * 日期商品视频
     */
    DETAILS_DATE_PRODUCT_AWEME("details-date-product-aweme"),

    /**
     * 商品日期达人直播间
     */
    DETAILS_PRODUCT_DATE_AUTHOR_ROOM("details-product-date-author-room"),

    /**
     * 商品日期达人视频
     */
    DETAILS_PRODUCT_DATE_AUTHOR_AWEME("details-product-date-author-aweme");


    public static final byte[] NAME_SPACE = "dy".getBytes();

    private final byte[] qualifier;

    DyTable() {
        this.qualifier = this.name().toLowerCase().getBytes();
    }

    DyTable(String qualifier) {
        this.qualifier = qualifier.getBytes();
    }

    /**
     * @return 对应hbase表的TableName
     */
    public TableName getTableName() {
        return TableName.valueOf(NAME_SPACE, qualifier);
    }

    public TableName getTableName(String suffix) {
        String name = Bytes.toString(qualifier) + "-" + suffix;
        return TableName.valueOf(NAME_SPACE, name.getBytes());
    }

    /**
     * 对应hbase的TableName带多个后缀
     *
     * @param strings
     * @return
     */
    public TableName getTableName(String... strings) {
        String suffix = String.join("-", strings);
        String tableName = Bytes.toString(qualifier) + "-" + suffix;
        return TableName.valueOf(NAME_SPACE, Bytes.toBytes(tableName));
    }
}
